package com.eddie.community.dao;

import com.eddie.community.entity.Message;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

@Mapper
public interface MessageMapper {

    /**
        * Description:查询当前用户的会话列表,针对每个会话只返回一条最新的私信.
        * @params [userId, offset, limit]
        * @return java.util.List<com.eddie.community.entity.Message>
        * @date 2021/2/28 0028 14:44
        * @Author Eddie.Zhan
        */
    List<Message> selectConversations(int userId, int offset, int limit);

    /**
        * Description: 查询当前用户的会话数量.
        * @params [userId]
        * @return int
        * @date 2021/2/28 0028 14:44
        * @Author Eddie.Zhan
        */
    int selectConversationCount(int userId);

    /**
        * Description: 查询某个会话所包含的私信列表.
        * @params [conversationId, offset, limit]
        * @return java.util.List<com.eddie.community.entity.Message>
        * @date 2021/2/28 0028 14:44
        * @Author Eddie.Zhan
        */
    List<Message> selectLetters(String conversationId, int offset, int limit);

    /**
        * Description: 查询某个会话所包含的私信数量.
        * @params [conversationId]
        * @return int
        * @date 2021/2/28 0028 14:45
        * @Author Eddie.Zhan
        */
    int selectLetterCount(String conversationId);

    /**
        * Description: 查询未读私信的数量
        * @params [userId, conversationId]
        * @return int
        * @date 2021/2/28 0028 14:45
        * @Author Eddie.Zhan
        */
    int selectLetterUnreadCount(int userId, String conversationId);

    /**
        * Description: 新增消息
        * @params [message]
        * @return int
        * @date 2021/2/28 0028 14:45
        * @Author Eddie.Zhan
        */
    int insertMessage(Message message);

    /**
        * Description: 修改消息的状态
        * @params [ids, status]
        * @return int
        * @date 2021/2/28 0028 14:45
        * @Author Eddie.Zhan
        */
    int updateStatus(List<Integer> ids, int status);

    // 查询某个主题下最新的通知
    Message selectLatestNotice(int userId, String topic);

    // 查询某个主题所包含的通知数量
    int selectNoticeCount(int userId, String topic);

    // 查询未读的通知的数量
    int selectNoticeUnreadCount(int userId, String topic);

    // 查询某个主题所包含的通知列表
    List<Message> selectNotices(int userId, String topic, int offset, int limit);

    //查询系统公告
    Message selectSystemNotice(String topic);
}
